/**
 * 
 */
package br.gov.sjc.aluguelsocial;

import br.gov.sjc.classes.NumeroSias;
import br.gov.sjc.dao.BaseDAO;
import br.gov.sjc.utils.Sair;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Spinner;
import android.widget.Toast;

/**
 * @author rodrigo.ramos
 *
 */
public class LocalizadoActivity extends Sair {
	//Declara base de dados
	public static SQLiteDatabase BancoDados = null;
	public static String nomeBanco = BaseDAO.DATABASE_NAME;
	public void openDB(){
		try{
			BancoDados = openOrCreateDatabase(nomeBanco,MODE_WORLD_READABLE,null);
			Log.v("LocalizadoActivity", "BancoDados.openOrCreateDatabase();");
		}catch (Exception E){
			Log.e("LocalizadoActivity", "Erro em BancoDados.close();"+E.getMessage());
		} 
	}
	public void closeDB(){
		BancoDados.close();
		Log.v("LocalizadoActivity", "BancoDados.close();");
	}

	//Declara Spinner
	Spinner  spNaoLocalizada ;
	//Declara CheckBox
	CheckBox cbLocalizada  ;
	// Declara Buttons
	Button btnLVoltar, btnLIr;
	//Declara base de dados
	// SQLiteDatabase bd = AluguelSocialAct.BancoDados ;

	//Pega o numero do Sias em uso atual
	NumeroSias ns = new NumeroSias();
	int NumSias = ns.getNumeroDaFamilia();
	int ID;

	//Declara Cursor
	Cursor cVerifica;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.localizado);
		registerBaseActivityReceiver();
		
		cbLocalizada = (CheckBox) findViewById(R.localizada.cbLocalizada);

		spNaoLocalizada = (Spinner) findViewById(R.localizada.spNaoLocalizada);

		/*****************************
		 * Configuração dos Spinners
		 * *************************** */

		ArrayAdapter<CharSequence> adpNaoLocalizada = ArrayAdapter.createFromResource(
				this, R.array.NaoLocalizada,
				android.R.layout.simple_spinner_item);
		adpNaoLocalizada.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spNaoLocalizada.setAdapter(adpNaoLocalizada);

		/** Inicia o set de dados caso haja dados */
		if (verificaRegistro(NumSias)){
			setarDados(ID);
			Log.v("LocalizadoActivity", "onCreate() Com dados do SiasN: "+NumSias+"ID: "+ID);
		}else{
			//Num tem seNão
			Log.v("LocalizadoActivity", "onCreate() Com dados vazios ");
		}

		/** Acao do botao Voltar */
		btnLVoltar = (Button) findViewById(R.localizada.btnVoltar);
		btnLVoltar.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				/** InitComponents */
				Intent ittLVoltar = new Intent(getApplicationContext(), progressoActivity.class);
				
				startActivity(ittLVoltar);
			}
		});//fim acao do botao voltar

		/** Acao do botao Prox */
		btnLIr = (Button) findViewById(R.localizada.btnIr);
		btnLIr.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				validaRegistro();

			}
		});//fim acao do botao Px
	}

	/**
	 * Validação dos campos 
	 */
	protected void validaRegistro() {
		//valida registros antes de serem persistidos na tabela
		//https://docs.google.com/spreadsheet/ccc?key=0AokhMs8Z0pqydEkxZmhGbG1UN09lVVZZeG1rTWFUYXc//

		if(cbLocalizada.isChecked()==false && spNaoLocalizada.getSelectedItem().toString().equals("-")){
			//Toast.makeText(this, "Selecione um campo", Toast.LENGTH_LONG).show();
			Toast toast= Toast.makeText(getApplicationContext(), "Selecione um campo!", Toast.LENGTH_SHORT);         
			toast.setGravity(Gravity.TOP, 0, 70);
			toast.show();
		}else if(cbLocalizada.isChecked()==true && spNaoLocalizada.getSelectedItem().toString().equals("Mudou-se")){
			//Toast.makeText(this, "Selecione um campo", Toast.LENGTH_LONG).show();
			Toast toast= Toast.makeText(getApplicationContext(), "Escolha apenas uma opção: Localizada ou Não Localizada", Toast.LENGTH_SHORT);         
			toast.setGravity(Gravity.TOP, 0, 70);
			toast.show();
		}else if(cbLocalizada.isChecked()==true && spNaoLocalizada.getSelectedItem().toString().equals("Endereço Inexistente")){
			//Toast.makeText(this, "Selecione um campo", Toast.LENGTH_LONG).show();
			Toast toast= Toast.makeText(getApplicationContext(), "Escolha apenas uma opção: Localizada ou Não Localizada", Toast.LENGTH_SHORT);         
			toast.setGravity(Gravity.TOP, 0, 70);
			toast.show();
		}else if(cbLocalizada.isChecked()==true && spNaoLocalizada.getSelectedItem().toString().equals("Ausente")){
			//Toast.makeText(this, "Selecione um campo", Toast.LENGTH_LONG).show();
			Toast toast= Toast.makeText(getApplicationContext(), "Escolha apenas uma opção: Localizada ou Não Localizada", Toast.LENGTH_SHORT);         
			toast.setGravity(Gravity.TOP, 0, 70);
			toast.show();
		}else if(cbLocalizada.isChecked()==true && spNaoLocalizada.getSelectedItem().toString().equals("Recusou-se")){
			//Toast.makeText(this, "Selecione um campo", Toast.LENGTH_LONG).show();
			Toast toast= Toast.makeText(getApplicationContext(), "Escolha apenas uma opção: Localizada ou Não Localizada", Toast.LENGTH_SHORT);         
			toast.setGravity(Gravity.TOP, 0, 70);
			toast.show();
		}else if(cbLocalizada.isChecked()==false && spNaoLocalizada.getSelectedItem().toString().equals("Mudou-se")){
			mudouse();
		}else if(cbLocalizada.isChecked()==false && spNaoLocalizada.getSelectedItem().toString().equals("Endereço Inexistente")){
			mudouse();
		}else if(cbLocalizada.isChecked()==false && spNaoLocalizada.getSelectedItem().toString().equals("Ausente")){
			mudouse();
		}else if(cbLocalizada.isChecked()==false && spNaoLocalizada.getSelectedItem().toString().equals("Recusou-se")){
			mudouse();
		}else{
			dadosOk();
		}
	}

	private void mudouse() {
		//  Auto-generated method stub
		if (verificaRegistro(NumSias)){
			alteraRegistro(ID);
		}else{
			
			String localizada, mudouse, endinexistente ;
			if (cbLocalizada.isChecked()){
				localizada = "Sim";
			}else{
				localizada = "Não";
			}

			endinexistente = "Não";
			mudouse = "Não";
			//salva dados
			salvaDados(NumSias,localizada,mudouse,endinexistente,spNaoLocalizada.getSelectedItem().toString());
		}
		/** InitComponents*/
		Intent ittNaoLocalizado = new Intent(getApplicationContext(), AluguelSocialAct.class);
		
		startActivity(ittNaoLocalizado);
	}

	public void dadosOk(){
		if (verificaRegistro(NumSias)){
			alteraRegistro(ID);
		}else{
			String localizada, mudouse, endinexistente ;
			if (cbLocalizada.isChecked()){
				localizada = "Sim";
			}else{
				localizada = "Não";
			}

			endinexistente = "Não";
			mudouse = "Não";
			//salva dados
			salvaDados(NumSias,localizada,mudouse,endinexistente,spNaoLocalizada.getSelectedItem().toString());
		}
		/** InitComponents*/
		Intent ittLocalizado = new Intent(getApplicationContext(), EnderecoActivity.class);
		startActivity(ittLocalizado);
	}


	public void salvaDados(int a, String b, String c, String d, String f){
		openDB();
		try{
			String SQL = "INSERT INTO tab_Localizado (SiasN,Localizado,Mudouse,EndInex,NaoLocalizada" +
					"  ) VALUES ("+a+", '"+b+"', '"+c+"', '"+d+"', '"+f+"')";
			BancoDados.execSQL(SQL);
			//mensagemAlerta("Ok","Gravando dados");	
			Toast.makeText(this, "Gravando Dados da Família:"+NumSias, Toast.LENGTH_LONG).show();
		}catch(Exception erro) {
			mensagemAlerta("Erro","Erro Ao Gravar ");
			Log.e("LocalizadoActivity", "Erro em BancoDados.close();"+erro.getMessage());
		}
		closeDB();
	}

	//SiasN, Localizado, Mudouse, EndInex, Sosam
	public boolean verificaRegistro(int NumeroSias){
		boolean Retorno = false;
		openDB();
		try{
			String SQLQuery = "Select _id from tab_Localizado WHERE SiasN="+NumeroSias+" ";
			cVerifica = BancoDados.rawQuery(SQLQuery, null);
			if (cVerifica.getCount() !=0 ){
				cVerifica.moveToFirst();
				ID = cVerifica.getInt(cVerifica.getColumnIndex("_id"));
				Retorno = true;
				Log.i("LocalizadoActivity", "verificaRegistro() TRUE ");
			}
		}catch (Exception Err){
			//mensagemAlerta("Erro","Erro Encontrado:"+Err.getMessage());
			Log.e("LocalizadoActivity", "verificaRegistro() "+Err.getMessage());
		}
		closeDB();
		return Retorno;

	}

	public void setarDados(int Posicao){
		openDB();
		try {
			String SQL2 = "SELECT * FROM tab_Localizado WHERE _id="+Posicao+" ";
			Log.v("LocalizadoActivity", "setarDados() Posição: "+Posicao);
			Cursor c = BancoDados.rawQuery(SQL2, null);
			c.moveToFirst();

			do {
				/*	    			String Mudouse =  c.getString(c.getColumnIndex("Mudouse"));
	    			if (Mudouse.equals("Sim")){
	    				cbNMudou.setChecked(true);
	    			}else{
	    				cbNMudou.setChecked(false);
	    			}
	    			String EndInex =  c.getString(c.getColumnIndex("EndInex"));
	    			if (EndInex.equals("Sim")){
	    				cbNEndInex.setChecked(true);
	    			}else{
	    				cbNEndInex.setChecked(false);
	    			}*/
				String Localizado =  c.getString(c.getColumnIndex("Localizado"));
				if (Localizado.equals("Sim")){
					cbLocalizada.setChecked(true);
				}else{
					cbLocalizada.setChecked(false);
				}

				//spNaoLocalizada
				ArrayAdapter<CharSequence> adpUNaoLocalizada = ArrayAdapter.createFromResource(
						this, R.array.NaoLocalizada,
						android.R.layout.simple_spinner_item);
				adpUNaoLocalizada.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				int iUNaoLocalizada = adpUNaoLocalizada.getPosition(c.getString(c.getColumnIndex("NaoLocalizada")));
				spNaoLocalizada.setSelection(iUNaoLocalizada);

			}while(c.moveToNext());

			Log.i("LocalizadoActivity", "setarDados() TRUE ");
		}catch (Exception E){
			mensagemAlerta("Erro","Ocorreu um erro inesperado");
			Log.e("LocalizadoActivity", "Erro em setarDados() "+E.getMessage());
		}
		closeDB();
	}

	public void alteraRegistro(int id){
		openDB();
		String localizada, mudouse, endinexistente ;
		if (cbLocalizada.isChecked()){
			localizada = "Sim";
		}else{
			localizada = "Não";
		}

		endinexistente = "Não";
		mudouse = "Não";
		try{
			String uSQL = "UPDATE tab_Localizado SET " +
					" SiasN='"+NumSias+"'," +
					" Localizado='"+localizada+"'," +
					" Mudouse='"+mudouse+"'," +
					" EndInex='"+endinexistente+"'," +
					" NaoLocalizada='"+spNaoLocalizada.getSelectedItem().toString()+"'" +
					" WHERE _id="+id+" ";
			BancoDados.execSQL(uSQL);
			Toast.makeText(LocalizadoActivity.this, "Alterado", Toast.LENGTH_LONG).show();
			Log.i("LocalizadoActivity", "alteraRegistro() realizado com sucesso ");
		}catch(Exception Err){
			mensagemAlerta("Erro","Ocorreu um erro inesperado");
			Log.e("LocalizadoActivity", "alteraRegistro() erro: "+Err.getMessage());

		}
closeDB();
	}


	public void mensagemAlerta(String AlertTitle, String MSGAlert){
		AlertDialog.Builder Mensagem = new AlertDialog.Builder(LocalizadoActivity.this);
		Mensagem.setTitle(AlertTitle);
		Mensagem.setMessage(MSGAlert);
		Mensagem.setNeutralButton("Ok", null);
		Mensagem.show();
	}

	@Override
	protected void onResume() {
		//quando a Activity main receber o foco novamente abre-se novamente a conexão
		
		//método responsável pela atualiza da lista de dados na tela
		//adapter.notifyDataSetChanged();
		super.onResume();
	}
	@Override
	protected void onPause() {

		//toda vez que o programa peder o foco fecha-se a conexão com o BD
		
		super.onPause();
	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		unRegisterBaseActivityReceiver();
		finish();
	}
}
